package com.ljxt.dt.util;

import com.ljxt.dt.domain.Resource;
import com.ljxt.dt.vo.TreeVo;

import java.util.ArrayList;
import java.util.List;

/**
 * 用来定义树结构的工具类
 *
 * @author 洋葱
 * @version 1.0.0
 * @date 2020/4/30 14:11
 * @copyright 老九学堂
 */
public class TreeUtils {

    public static List<TreeVo<Integer, Resource>> buildTree(List<Resource> resources) {
        // 定义一个集合用来保存根节点
        List<TreeVo<Integer,Resource>> roots = new ArrayList<>();
        // 循环找出根节点
        for (Resource res : resources) {
            // 父节点编号为0的是根节点
            if (res.getParentId().equals(0)) {
                // 创建根节点
                TreeVo<Integer, Resource> root = new TreeVo<>();
                // 设置树形节点所需的数据
                root.setId(res.getId());
                root.setText(res.getName());
                root.setHref(res.getUrl());
                root.setParentId(res.getParentId());
                // 把节点添加到集合中
                roots.add(root);
                // 查找子节点
                getChildNode(root, resources);
            }
        }
        // 返回树节点集合
        return roots;
    }

    public static void getChildNode(TreeVo parent, List<Resource> resources) {
        // 循环集合中的数据
        for (Resource res : resources) {
            // 判断集合中数据是否是父节点的子节点数据
            if (res.getParentId().equals(parent.getId())) {
                // 判断父节点中包含子节点的集合是否为空
                if (parent.getChildren() == null) {
                    parent.setChildren(new ArrayList<>());
                }
                // 创建子节点对象
                TreeVo<Integer, Resource> child = new TreeVo<>();
                // 设置子节点的数据
                child.setId(res.getId());
                child.setText(res.getName());
                child.setHref(res.getUrl());
                child.setParentId(res.getParentId());
                // 把子节点的数据添加到父节点的集合
                parent.getChildren().add(child);
                // 再查找子节点的子节点数据
                getChildNode(child, resources);
            }
        }

    }


}
